import {
	computed,
	onMounted,
	onUnmounted,
	reactive,
	ref,
	nextTick,
	toRaw,
	watch,
} from "vue";

import * as util from '@/amtf/utils'

export default function(cfg = {}) {
	const key = cfg.key
	let 源单项组 = []

	// 查多个,返回数组
	async function 查(req = {}) {
		try {
			const res = await uni.getStorage({ key });
			if (res.data) {
				源单项组 = res.data;
				let data = res.data
				if (req.仅进行中) {
					data = util.数组过滤(data, "状态", "进行中");
				}
				// 返回副本,避免子数组(明细)产生链接
				return util.深拷贝(data);
			}
			return []; // 没有数据时返回 null
		} catch (error) {
			// console.log('查多个 error: ', error);
			// uni.showToast({
			// 	title: error,
			// 	duration:5000,
			// 	icon: "none"
			// });
			// throw error;
			return []
		}
	}

	function 清缓存() {
		uni.removeStorage({
			key,
			success: function(res) {
				// console.log('success');
			}
		});
	}

	async function 增(单项) {
		// console.log('增单项: ', 单项);
		源单项组.unshift(util.深拷贝(单项))
		return 增或改(单项)
	}

	async function 增或改(单项) {
		try {
			let 源单项 = util.查元素(源单项组, 单项.id)
			// console.log('单项: ',单项.明细[0].数量);
			// console.log('源单项: ',源单项.明细[0].数量);
			// console.log('库中源 res: ', res);
			// util.对象重予(源单项, util.深拷贝(单项))
			// 上面会把子数组(明细)删除，导致丢失响应式，初始化的时候链接到了单项组？
			Object.assign(源单项, 单项)
			// console.log('对象重予 后 源单项: ',源单项.明细[0].数量);
			const res = await uni.setStorage({
				key,
				data: 源单项组
			})
			// console.log('增或改 res: ',res);
			return res
		} catch (error) {
			console.log('增 error: ', error);
			return error
		}
	}

	async function 改(单项) {
		// console.log('api改 单项: ', 单项);
		return 增或改(单项)
	}

	async function 改整个对象(data) {
		try {
			const res = await uni.setStorage({
				key,
				data
			})
			// console.log('增或改 res: ',res);
			return res
		} catch (error) {
			console.log('改整个对象 error: ', error);
			return error
		}
	}

	return {
		增,
		改整个对象,
		改,
		查,
		清缓存,
	};

}